/**********************************
   * Learning practices
   *
   *文件名称:show_time_stdio.c
   *文件标识:
   *摘要:将当前的时间写入到tim.txt的文件中，如果ctrl+c退出之后，在再次执行支持断点续写(标准IO)
   *
   *当前版本:1.0
   *作者:上官筱旭
   *完成日期:2022.5.3
   *********************************/
#include <head.h>
#include <time.h>

int getLineNum(FILE*fp)
{
    char s[10];
    int line=0;
    while (fgets(s, sizeof(s), fp) != NULL)
    {
        if (strlen(s) == sizeof(s) - 1)
        {
            if (s[sizeof(s) - 2] != '\n')
            {
                continue;
            }
        }
        line++;
    }
    return line;
}

int main(int argc, const char* argv[])
{
    int fd;
    time_t time_new, time_old;//统计秒数
    struct tm* tm;//存放localtime函数返回的时间结构体
    char s[50];//存放每次读到的时间字符串
    int line = 0;//存放行号

    //打开文件
    if(-1 == (fd = open("time.txt", O_RDWR|O_APPEND|O_CREAT, 0664)))//想要获取到行号，必须使用a+
    {
        perror("open error");
        return -1;
    }

    while(1)
    {
        time(&time_new);//以传参的方式获取当前秒数
        tm = localtime(&time_new);//获取当前时间格式化结构体
        if(NULL == tm)
        {
            perror("get time error");
            return -1;
        }
        if(time_new != time_old)//轮循获取时间更加精准
        {
            time_old = time_new;
            sprintf(s,"%3d.%4d-%02d-%02d %02d:%02d:%02d\n",
                    ++line,  tm->tm_year + 1900,tm->tm_mon + 1, 
                    tm->tm_mday, tm->tm_hour, tm->tm_min, 
                    tm->tm_sec);
            write(fd, s, strlen(s));
        }
    }
    close(fd);

    return 0;
}